package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocProgItemDAO;
import org.jsola.hr.dto.SocProgItemAddDTO;
import org.jsola.hr.dto.SocProgItemUpdateDTO;
import org.jsola.hr.entity.SocProgItemDO;
import org.jsola.hr.query.SocProgItemQuery;
import org.jsola.hr.vo.SocProgItemListVO;
import org.jsola.hr.vo.SocProgItemVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 参保方案表子项
 *
 * @author zhr
 */
public interface ISocProgItemService extends IService<ISocProgItemDAO, SocProgItemDO> {

    /**
     * 新增参保方案表子项
     *
     * @param socProgItemAddDTO 新增参保方案表子项DTO
     * @param tokenUser         当前用户
     * @return 参保方案表子项详情信息
     */
    SocProgItemVO save(SocProgItemAddDTO socProgItemAddDTO, TokenUser tokenUser);

    /**
     * 批量新增参保方案表子项
     *
     * @param socProgItemAddDTOList 新增参保方案表子项DTO
     * @param tokenUser             当前用户
     * @return 参保方案表子项详情信息
     */
    List<SocProgItemVO> batchSave(List<SocProgItemAddDTO> socProgItemAddDTOList, TokenUser tokenUser);

    /**
     * 修改参保方案表子项
     *
     * @param socProgItemUpdateDTO 修改参保方案表子项DTO
     * @param tokenUser            当前用户
     * @return 更新数量
     */
    int update(SocProgItemUpdateDTO socProgItemUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除参保方案表子项，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser      当前用户
     * @param socProgItemIds 参保方案表子项id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... socProgItemIds);

    /**
     * 根据参保方案Id删除方案表子项
     *
     * @param socProgId 参保方案Id
     * @param tokenUser 当前用户
     * @return 删除条数
     */
    int deleteBySocProgId(String socProgId, TokenUser tokenUser);

    /**
     * 根据参保方案表子项id查找
     *
     * @param socProgItemId 参保方案表子项id
     * @param siteId        所属站点id
     * @return 参保方案表子项详情信息
     */
    SocProgItemVO selectById(String socProgItemId, String siteId);

    /**
     * 查询参保方案表子项
     *
     * @param socProgItemQuery 查询条件
     * @param siteId           所属站点id
     * @return 参保方案表子项列表信息
     */
    List<SocProgItemListVO> select(SocProgItemQuery socProgItemQuery, String siteId);

    /**
     * 查询参保方案表子项记录数
     *
     * @param socProgItemQuery 查询条件
     * @param siteId           所属站点id
     * @return 参保方案表子项记录数
     */
    int selectCount(SocProgItemQuery socProgItemQuery, String siteId);

    /**
     * 分页查询参保方案表子项
     *
     * @param socProgItemQuery 查询条件
     * @param siteId           所属站点id
     * @return 参保方案表子项列表信息
     */
    Page<SocProgItemListVO> selectPage(SocProgItemQuery socProgItemQuery, String siteId);


    /**
     * 根据参保方案表子项id查找
     *
     * @param socProgItemId 参保方案表子项id
     * @param siteId        所属站点id
     * @return 参保方案表子项
     */
    SocProgItemDO selectDOById(String socProgItemId, String siteId);

    /**
     * 查询参保方案表子项
     *
     * @param socProgItemQuery 查询条件
     * @param siteId           所属站点id
     * @return 参保方案表子项列表
     */
    List<SocProgItemDO> selectDO(SocProgItemQuery socProgItemQuery, String siteId);

    /**
     * 根据参保方案id获取参保方案子项
     *
     * @param socProgId 参保方案id
     * @param siteId    站点
     * @return 参保方案子项
     */
    List<SocProgItemDO> selectBySocProgId(String socProgId, String siteId);

    /**
     * 根据参保方案id获取参保方案子项
     *
     * @param socProgIds 参保方案id
     * @param tokenUser  当前用户
     * @return 参保方案子项
     */
    List<SocProgItemDO> selectBySocProgIds(List<String> socProgIds, TokenUser tokenUser);

    /**
     * 根据参保方案 id 和参保方案子项名称查询某一子项
     *
     * @param socProgId 参保方案id
     * @param itemName  子项名称
     * @param siteId    站点
     * @return 参保方案子项
     */
    SocProgItemDO selectBySocProgIdAndItemName(String socProgId, String itemName, String siteId);

    /**
     * 根据参保方案Id和子项类型查询参保方案子项
     *
     * @param socProgId 参保方案Id
     * @param itemType 子项类型
     * @param tokenUser 当前用户
     * @return 参保方案子项
     */
    List<SocProgItemDO> selectBySocProgIdAndItemType(String socProgId, Integer itemType, TokenUser tokenUser);
}


